const backgroundAudioManager = wx.getBackgroundAudioManager()
let movableArea = 0;
let movableView = 0;
let currentSec = -1;
let duration = 0;
let isMoving = false;
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    isSame:{
      type:Boolean,
      value:false
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    showTime:{
      currentTime:'00:00',
      totalTime:'00:00'
    },
    movableDis:0,
    progress:0,
    
  },
  lifetimes:{
    ready() {
      this._caculate()
      this._bindAudioEvent()
      if (this.properties.isSame) {
        this._getTotalTime()
      }
    }
  },

  /**
   * 组件的方法列表
   */
  methods: {
    /**
     * 滑动事件
     */
    onChange(ev) {
      if (ev.detail.source === 'touch') {
        isMoving = true
        this.data.movableDis = ev.detail.x
        this.data.progress = ev.detail.x / (movableArea - movableView) * 100
      }
     
    },
    /**
     * 滑动结束事件
     */
    onEnd() {
      let curPlayDate = duration * this.data.progress / 100
      backgroundAudioManager.seek(curPlayDate)
      let {min,sec} = this._formatDate(backgroundAudioManager.currentTime)
      this.setData({
        movableDis:this.data.movableDis,
        progress:this.data.progress,
        'showTime.currentTime':`${min}:${sec}`
      })
      isMoving = false
    },
    /**
     * 计算滑动的距离
     */
    _caculate() {
      const query = this.createSelectorQuery()
      query.select('.movable-area').boundingClientRect()
      query.select('.movable-view').boundingClientRect()
      query.exec((res) => {
        movableArea = res[0].width
        movableView = res[1].width
      })
    },
    /**
     * 绑定播放器事件
     */
    _bindAudioEvent() {
       // 监听背景音频播放事件
      backgroundAudioManager.onPlay(()=> {
       isMoving = false
       this.triggerEvent('musicPlay')
      })
       // 背景音频进入可播放状态事件的回调函数
      backgroundAudioManager.onCanplay(() => {
        if (typeof backgroundAudioManager.duration === 'undefined') {
          setTimeout(() => {
            this._getTotalTime()
          },1000)
        } else {
          this._getTotalTime()
        }
      })
      // 监听背景音频暂停事件
      backgroundAudioManager.onPause(() => {
        this.triggerEvent('musicPause')
      })
      //监听背景音频自然播放结束事件
      backgroundAudioManager.onEnded(() => {
        this.triggerEvent('musicEnd')
      })
      // 监听背景音频停止事件
      backgroundAudioManager.onStop(() => {

      })
      // 监听背景音频播放进度更新事件，只有小程序在前台时会回调。
      backgroundAudioManager.onTimeUpdate(() => {
        if (!isMoving) {
          let currentTime = backgroundAudioManager.currentTime
          let cSec = Number(String(currentTime).split('.')[0])
          if (currentSec !== cSec) {
            this.triggerEvent('timeUpdate',currentTime)
            let {min,sec} = this._formatDate(currentTime)
            duration = backgroundAudioManager.duration
            this.setData({
              'showTime.currentTime':`${min}:${sec}`,
              movableDis:currentTime / duration * (movableArea - movableView),
              progress: currentTime / duration * 100
            })
            currentSec = cSec
          }
        }
      })
      // 监听音频加载中事件。当音频因为数据不足，需要停下来加载时会触发
      backgroundAudioManager.onWaiting(() => {

      })
      // 监听背景音频播放错误事件
      backgroundAudioManager.onError(() => {

      })
      // 监听用户在系统音乐播放面板点击上一曲事件（仅iOS）
      backgroundAudioManager.onPrev(() => {

      })
      // 监听用户在系统音乐播放面板点击下一曲事件（仅iOS）
      backgroundAudioManager.onNext(() => {

      })
      // 监听背景音频开始跳转操作事件
      backgroundAudioManager.onSeeking(() => {

      })
      // 监听背景音频完成跳转操作事件
      backgroundAudioManager.onSeeked(() => {

      })
    },
    /**
     * 获取歌曲的播放总时间
     */
    _getTotalTime() {
      let date = backgroundAudioManager.duration
      let {min,sec} = this._formatDate(date)
      this.setData({
        'showTime.totalTime':`${min}:${sec}`
      })
    },
    /**
     * 格式化时间
     */
    _formatDate(date) {
      let min = this._parse0(Math.floor(date / 60))
      let sec = this._parse0(Math.floor(date % 60))
      if (date) {
        return {
          min,sec
        }
      }
      return {
        min:'00',
        sec:'00'
      }
    },
    /**
     * 补零操作
     */
    _parse0(date) {
      if (date) {
        return Number(date) > 9 ? date : '0'+date
      }
      return '00'
    }
  }
})
